package tool

import (
	"github.com/duke-git/lancet/v2/slice"
	"math"
	"wsgr-recognize/types"
)

// 低于平均亮度 80%的减少10单位亮度
// 高于平均亮度 120%的增加10单位亮度
// 计算每一个像素点的差，值越大图片差异越大
func AbsOne(in *[]float64, TemplateData map[string][]int64) []types.SimilarityRes {
	var sum float64
	slice.ForEach(*in, func(index int, item float64) {
		sum += item
	})
	oPx := (*in)[0]
	for k, value := range *in {
		// 第一个像素默认为背景，跟背景相差10以内的全部变成黑的

		if math.Abs(oPx-value) <= 10 {
			(*in)[k] = 0
		}
	}

	var absRes []types.SimilarityRes
	for k, v := range TemplateData {
		// 模板图片第一个像素默认为背景，跟背景相差10以内的全部变成黑的
		oPx := v[0]
		for pxk, px := range v {
			if math.Abs(float64(oPx)-float64(px)) <= 10 {
				v[pxk] = 0
				continue
			}
		}

		var res types.SimilarityRes
		res.Type = k
		for ink, inkValue := range *in {
			res.Value += math.Abs(float64(v[ink]) - inkValue)
		}
		absRes = append(absRes, res)
	}

	slice.SortBy(absRes, func(a, b types.SimilarityRes) bool {
		return a.Value < b.Value
	})
	return absRes
}
